from enum import Enum


class CatBoostEvalMetric(Enum):
    MULTI_CLASS = ('MultiClass', '用于多分类任务，计算类别的对数损失来进行优化。适用于类别数大于 2 的任务。')
    MULTI_CLASS_ONE_VS_ALL = (
    'MultiClassOneVsAll', '用一对多的方式进行多分类优化，每个类别与其他类别进行对比，适用于多分类任务。')
    LOGLOSS = ('Logloss', '用于二分类和多分类任务，计算每个样本的对数损失，适用于对数几率回归模型。')
    CROSS_ENTROPY = ('CrossEntropy', '类似于 Logloss，通常用于多分类任务，计算类别的交叉熵损失。')
    AUC = ('AUC', '基于 AUC（曲线下面积）的优化，适用于二分类任务，常用于处理不平衡数据集。')
    ACCURACY = ('Accuracy', '计算分类任务的准确率，适用于二分类和多分类任务。')
    ACCURACY_TOP_K = ('Accuracy:top=k', 'Top-K 预测正确的比率，适用于多分类任务。')
    F1 = ('F1', '计算 F1 值，适用于不均衡的二分类任务。')
    F1_BETA = ('F1:beta=β', '计算 Fβ-score，其中 β 控制召回率和精确率的权重。')
    PRECISION = ('Precision', '计算精确率（Precision），适用于二分类任务。')
    RECALL = ('Recall', '计算召回率（Recall），适用于二分类任务。')
    PRAUC = ('PRAUC', '计算 PR 曲线下面积，适用于二分类任务。')
    HINGE_LOSS = ('HingeLoss', 'SVM 的 Hinge 损失，适用于二分类任务。')
    KAPPA = ('Kappa', 'Cohen’s Kappa 评分，适用于二分类和多分类任务。')
    BALANCED_ACCURACY = ('BalancedAccuracy', '计算平衡准确率，适用于不均衡数据的分类任务。')
    PAIR_LOGIT = ('PairLogit', '对比学习损失函数，适用于排序任务。')

    def __init__(self, metric_name, description):
        self.metric_name = metric_name
        self.description = description

    def __str__(self):
        return f"{self.metric_name}: {self.description}"
